/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package frontera.dao;

import entidad.Falla;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

/**
 *
 * @author tuareg
 */
public class FallaDAO  extends DAO<Falla>{

	public FallaDAO(String nombreEntidad) {
		super(nombreEntidad);
	}

	public FallaDAO() {
		this("Falla");
	}
        
	@Override
	public boolean actualizar(Falla viejaEntidad, Falla nuevaEntidad) {
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            boolean ret= false;
            try {
                viejaEntidad = leer(viejaEntidad);
                viejaEntidad.setCedula(nuevaEntidad.getCedula());
                viejaEntidad.setFecha(nuevaEntidad.getFecha());
                em.merge(viejaEntidad);
                em.getTransaction().commit();
                ret = true;
            } catch (Exception e) {
                em.getTransaction().rollback();
            } finally {
                em.close();
                return ret;
            }
	}
        
        @Override
        public boolean eliminar(Falla falla){
                EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		boolean ret = false;
                Query q = em.createQuery(   "SELECT f FROM Falla f " +
                                        "WHERE f.id = :ID")
                                        .setParameter("ID", falla.getId());
                
                Falla nuevaEntidad = null;
                try {
                    nuevaEntidad = (Falla)q.getSingleResult();
                } catch (NonUniqueResultException e) {
                    nuevaEntidad = (Falla)q.getResultList().get(0);
                } catch (NoResultException e){
                    nuevaEntidad = null;
                }  
		
                try {
			em.remove(nuevaEntidad);
			em.getTransaction().commit();
			ret = true;
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
			return ret;
		}
        }
        
        public Falla leer(Falla par) {
            EntityManager em = emf.createEntityManager();
            Falla falla = null;

            Query q = em.createQuery(   "SELECT f FROM Falla f " +
                                        "WHERE f.id = :ID")
                                        .setParameter("ID", par.getId());
            try {
                falla = (Falla)q.getSingleResult();
            } catch (NonUniqueResultException e) {
                falla = (Falla)q.getResultList().get(0);
            } catch (NoResultException e){
                falla = null;
            } catch (Exception e){
                e.printStackTrace();
            } 
            finally {
                em.close();
                return falla;
            }
        }
        
        public List<Falla> leerListado(long ID){
            EntityManager em = emf.createEntityManager();
            List<Falla> fallas = new ArrayList();
            
            Query q = em.createQuery(   "SELECT f FROM Falla f " +
                                        "WHERE f.empAsociado.ID = :EMPASOCIADO_ID")
                                        .setParameter("EMPASOCIADO_ID", ID);
            try{
                fallas = q.getResultList();
            } catch (Exception e){
                e.printStackTrace();
            }finally {
                em.close();
                return fallas;
            }
        }
}
